iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 24
0
Mobile Development

大一之 Android Kotlin 自習心路歷程系列 第 24

[Day 24] Android in Kotlin: 資料庫第一第二正規化入門

  • 分享至 

  • xImage
  •  

前幾篇的 MVVM 簡介有提到,其中一種資料來源是本地資料庫。只要有關於資料庫,資料庫的設計就很重要,他會間接地影響到程式的 debug 和執行速度等。所以一個好的資料庫就很重要

關於資料庫設計,首先就會先提到資料庫正規化

資料庫正規化

首要目標是使其減少重複,一般來說,行動裝置的本地資料庫不會做到很大一個。通常做到第二或第三標準化即可。這裡只會做一些初階的概念,如果對於正規化有興趣的讀者,可以去搜尋看看。

例如現在有一個資料表如下。

company product price amount total
甲公司 A商品, B商品 10元, 20元 5個, 10個 50元, 200元
乙公司 A商品, C商品 10元, 30元 3個, 15個 30元, 450元
丙公司 B商品, C商品 20元, 30元 4個, 12個 80元, 360元

第一正規化

首先是第一正規化:同一個欄位中,不能有多個值。

把上面的資料表修正後會變成以下。

company product price amount total
甲公司 A商品 10元 5個 50元
甲公司 B商品 20元 10個 200元
乙公司 A商品 10元 3個 30元
乙公司 C商品 30元 15個 450元
丙公司 B商品 20元 4個 80元
丙公司 C商品 30元 12個 360元

另外,需要有唯一、不重複的識別碼,稱為 primary key。當有相同內容的時候也能分出兩個的不同。

加上編號

_id company product price amount total
1 甲公司 A商品 10元 5個 50元
2 甲公司 B商品 20元 10個 200元
3 乙公司 A商品 10元 3個 30元
4 乙公司 C商品 30元 15個 450元
5 丙公司 B商品 20元 4個 80元
6 丙公司 C商品 30元 12個 360元

第二正規化

如果有彼此相依的欄位,可以分開寫,比如這裡的商品和單價,每次寫一次商品就要加上單價,就可以分開成另一個資料表。

product_table:

_id product price
1 A商品 10元
2 B商品 20元
3 C商品 30元

一樣要有 primary key。

_id company product_id amount total
1 甲公司 1 5個 50元
2 甲公司 2 10個 200元
3 乙公司 1 3個 30元
4 乙公司 3 15個 450元
5 丙公司 2 4個 80元
6 丙公司 3 12個 360元

再用商品碼連到 product_table 的 _id,而 product_id 對於現在這個資料表來說就是 forign key。

這麼做的原因就是為了存取速度了。


上一篇
[Day 23] Android in Kotlin: MVVM 架構分享 —— LiveData Observe 簡單示範
下一篇
[Day 25] Android in Kotlin: Room Database 操作示範
系列文
大一之 Android Kotlin 自習心路歷程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言